/** 节流事件在触发N秒后执行回调，在N秒内触发无效 */
/** 方案1:时间戳版本 */
/** 使用场景:滚动监听，窗口resize，第一次立刻执行 */
function throttle(func,delay){
    var prev = Date.now()
    return function(...args) {
        var context = this;
        var now = Date.now();
        if(now - prev >= delay){
            func.apply(context,args);
            prev = Date.now();
        }
    }
}

/** 方案2:定时器版本 */
/** 第一次延迟执行；使用场景：按钮防重复点击  */
function throttle(fn,delay){
    var timer = null;
    return function(...args){
        var context = this;
        if(!timer){
            timer = setTimeout(()=>{
                fn.apply(context,args);
                timer = null;
            },delay);
        }
    }
}